<?php
require_once("model/data.php");

require_once("model/image.php");
require_once("model/note.php");
require_once("model/imageDAO.php");
require_once("model/album.php");
	
	/**
	 * Classe du controleur Photo
	 */
	class Photo {
		
		protected $imageDAO;
		protected $minSize =100;
		protected $maxSize =2000;
		protected $data;
		function __construct() {
			// Ouvre le blog
			$this->imageDAO = new ImageDAO();

		}
		
		/** 
		 * Recupere les parametres de manière globale
		 * Pour toutes les actions de ce contrôleur
		 */
		protected function getParam() {
			// Recupère un éventuel no de départ			
			global $imgId,$albumId,$size,$data,$nbImg,$categorie;
			if (isset($_GET["imgId"]) && $_GET["imgId"]!="" && $_GET["imgId"]>0) {
				$imgId = $_GET["imgId"];
			} else {
				$imgId = 1;
			}
			
			// Recupere le mode delete de l'interface
			if (isset($_GET["size"]) && $_GET["size"]!="") {
				$size = $_GET["size"];
				if($size>=$this->maxSize ){
					$size =$this->maxSize;
				}else if($size<=$this->minSize){
					$size =$this->minSize;
				}
			} else {
				# sinon place une valeur de taille par défaut
				$size = 480;
			}
			// Récupère le nombre d'images à afficher
			if (isset($_GET["nbImg"])) {
				$nbImg = $_GET["nbImg"];
			} else {
				# sinon débute avec 2 images
				$nbImg = 1;
			}
			// Récupère la categorie à afficher
			if (isset($_GET["categorie"])) {
				$categorie = $_GET["categorie"];
			} else {
				# sinon débute avec 2 images
				$categorie = NULL;
			}
			$data = new data();
		}
		
		//////////////////////// LISTE DES ACTIONS DE CE CONTROLEUR/////////////////////////////
		
		/**
		 * initialisation du controleur
		 */
		function index(){
			$this->first();
		}
		
		/**
		 *initialisation de la page
		 */
		function configureSlideShow(){
			global $albumId,$imgId,$size,$data,$nbImg,$categorie;
			// Pre-calcule les images
			$newImg = $this->getImageDAO()->getImage(1);
			$newImgId=$newImg->getId();
			
			$randomImg = $this->getImageDAO()->getRandomImage();
			$randomImgId = $randomImg->getId();
			
			$newSize=480;
			$data->styles["#slideShow"]["width"]= ($size+130)."px";
			$data->styles["#next,#prev"]["height"]= ($size/3)."px";
						

			
			// pre-calcul de l'image précedente
			$data->prevImg = $this->getImageDAO()->getPrevImage($data->img);
			// pre-calcul de l'image suivante
			$data->nextImg = $this->getImageDAO()->getNextImage($data->img);
			
			# Mise en place des outils
			$data->tools['First']="index.php?controller=photo&action=first&imgId=$newImgId&size=$newSize&categorie=$categorie";
			# Pre-calcule une image au hasard
			$data->tools['Random']="index.php?controller=photo&action=random&imgId=$randomImgId&size=$size&categorie=$categorie";
			# Pour afficher plus d'image passe à une autre page
			if($categorie!=null && $nbImg==$this->getImageDAO()->getNbImageCategory($categorie)){
				$data->styles["#More"]["display"]= "none";
			}else{
				$nbImg =$nbImg +1;
				$data->tools['More']="index.php?controller=photoMatrix&action=more&imgId=$imgId&size=$size&nbImg=$nbImg&categorie=$categorie";
			}
			// Demande à calculer un zoom sur l'image
			$data->tools['Zoom +']="index.php?controller=photo&action=zoom&imgId=$imgId&size=".($size*1.25)."&categorie=$categorie";
			// Demande à calculer un zoom sur l'image
			$data->tools['Zoom -']="index.php?controller=photo&action=zoom&imgId=$imgId&size=".($size*0.75)."&categorie=$categorie"; 			
			$data->toolsimg['First']="first.png";
			$data->toolsimg['Random']="random.png";
			$data->toolsimg['More']="add.png";
			$data->toolsimg['Less']="less.png";
			$data->toolsimg['Zoom +']="zoom+.png";
			$data->toolsimg['Zoom -']="zoom-.png";		
			
			$data->albums = $this->getImageDAO()->getAlbums();			
			$data->categories = $this->getImageDAO()->getCategories();
			$data->select = $this->getImageDAO()->getImage($imgId);
			$data->note = $this->getImageDAO()->getNote($imgId);
			$data->categorie = $categorie;
		}
		
		/**
		 *permet de mettre l'image courante sur la premiere image
		 */
		function first(){
			global $imgId,$size,$data,$nbImg,$categorie;
			$this->getParam();

			$data->content = "viewPhoto.php";
			$data->cssfiles = array("photo.css");
			$imgId = 1;
			$newImg = $this->getImageDAO()->getImage($imgId);
			$categorieImg = $newImg->getCategory();
			while ($categorieImg!=$categorie && $categorie!=NULL){
				$newImg = $this->getImageDAO()->getNextImage($newImg);
				$categorieImg = $newImg->getCategory();
			}
			// Construit l'image courante
			$imgId = $newImg->getId();
			$data->img = $newImg;
			$this->configureSlideShow();
			require_once("view/mainView.php");
		}
		
		/**
		 *permet de mettre l'image courante sur une image aléatoire
		 */
		function random(){
			global $imgId,$size,$data,$nbImg,$categorie;
			$this->getParam();

			$data->content = "viewPhoto.php";
			$data->cssfiles = array("photo.css");
			$newImg = $this->getImageDAO()->getImage($imgId);
			$categorieImg = $newImg->getCategory();
			$random = rand(0,1) ;
			if ($random==0){
				while ($categorieImg!=$categorie && $categorie!=NULL){
				$newImg = $this->getImageDAO()->getPrevImage($newImg);
				$categorieImg = $newImg->getCategory();
				}
			}else{
				while ($categorieImg!=$categorie && $categorie!=NULL){
					$newImg = $this->getImageDAO()->getNextImage($newImg);
					$categorieImg = $newImg->getCategory();
				}
			}
			// Construit l'image courante
			$imgId = $newImg->getId();
			$data->img = $newImg;
			$this->configureSlideShow();
			require_once("view/mainView.php");
		}
		
		/**
		 *permet de mettre l'image courante sur l'image precedente
		 */
		function prec(){
			global $imgId,$size,$data,$nbImg,$categorie;
			$this->getParam();

			$data->content = "viewPhoto.php";
			$data->cssfiles = array("photo.css");
			$newImg = $this->getImageDAO()->getImage($imgId);
			$categorieImg = $newImg->getCategory();
			while ($categorieImg!=$categorie && $categorie!=NULL){
				$newImg = $this->getImageDAO()->getPrevImage($newImg);
				$categorieImg = $newImg->getCategory();
			}
			// Construit l'image courante
			$imgId = $newImg->getId();
			$data->img = $newImg;
			$this->configureSlideShow();
			require_once("view/mainView.php");
		
		}
		
		/**
		 *permet de mettre l'image courante sur l'image suivante
		 */
		function next(){
			global $imgId,$size,$data,$nbImg,$categorie;
			$this->getParam();

			$data->content = "viewPhoto.php";
			$data->cssfiles = array("photo.css");
			$newImg = $this->getImageDAO()->getImage($imgId);
			$categorieImg = $newImg->getCategory();
			while ($categorieImg!=$categorie && $categorie!=NULL){
				$newImg = $this->getImageDAO()->getNextImage($newImg);
				$categorieImg = $newImg->getCategory();
			}
			// Construit l'image courante
			$imgId = $newImg->getId();
			$data->img = $newImg;
			$this->configureSlideShow();
			require_once("view/mainView.php");	
		
		}
		
		/**
		 *permet de zoomer sur l'image courante
		 */
		function zoom(){
			$this->next();
		}
		
		/**
		 * return ImageDAO
		 */
		function getImageDAO(){
			return $this->imageDAO;
		}
		
		/**
		 *permet de mettre a jour les infos de l'image courante puis l'affiche
		 */
		function updatePhoto(){
			global $imgId,$size,$data,$nbImg,$categorie;
			$this->getParam();

			$data->content = "viewPhoto.php";
			$data->cssfiles = array("photo.css");
			$img = $this->getImageDAO()->getImage($imgId);
			if (!isset($_POST["category2"]) || $_POST["category2"]=="" || $_POST["category2"]==NULL){
				$img->setCategory(addslashes($_POST["category"]));
			}else{
				$img->setCategory(addslashes($_POST["category2"]));
			}
			$img->setComment(addslashes($_POST["comment"]));
			$this->getImageDAO()->updateImg($img);
			// Construit l'image courante
			$data->img = $img;
			$this->configureSlideShow();
			require_once("view/mainView.php");
		}

		/**
		 *permet de mettre a jour les infos de l'image sur les notes de l'image
		 */
		function updateNote(){
			global $imgId,$size,$data,$nbImg,$categorie;
			$this->getParam();

			$data->content = "viewPhoto.php";
			$data->cssfiles = array("photo.css");
			$this->getImageDAO()->updateNote($_GET["val"],$imgId);
			// Construit l'image courante
			$data->img = $this->getImageDAO()->getImage($imgId);
			$this->configureSlideShow();
			require_once("view/mainView.php");
		}
		
		/**
		 *permet de filtrer les photos selon la categorie sélectionné
		 */
		function filterPhoto(){
			global $albumId,$imgId,$size,$data,$nbImg,$categorie;
			$this->getParam();
			$categorie = $_POST["category"];

			$data->content = "viewPhoto.php";
			$data->cssfiles = array("photo.css");
			
			
			$imgId = 1;
			
			$newImg = $this->getImageDAO()->getImage($imgId);
			$categorieImg = $newImg->getCategory();
			while ($categorieImg!=$categorie && $newImg->getId()<=$this->getImageDAO()->count() && $categorie!=null){
				$newImg = $this->getImageDAO()->getNextImage($newImg);
				$categorieImg = $newImg->getCategory();
			}
			// Construit l'image courante
			$imgId = $newImg->getId();
			$data->img = $newImg;
			$this->configureSlideShow();
			require_once("view/mainView.php");
		}
	}	
?>